package com.webserver.controller;

import com.webserver.http.HttpRequest;
import com.webserver.http.HttpResponse;
import com.webserver.vo.User;

import java.io.*;

/**
 * 用来处理和用户相关的业务操作
 */
public class UserController {
    //保存所有用户信息的目录的名字
    private static String userDirName = "./users/";

    static {
        //程序加载时判断一下保存所有用户信息的目录是否存在，不存在先自动创建出来
        File userDir = new File(userDirName);
        if(!userDir.exists()){
           userDir.mkdirs();
        }
    }


    /**
     * 用来处理用户注册操作
     * @param request
     * @param response
     */
    public void reg(HttpRequest request, HttpResponse response){
        System.out.println("开始处理用户注册....");
        //1从request中获取用户表单上提交的注册信息
        //注:request.getParameter()获取表单某输入框上的内容要传递的参数为该输入框name=""属性指定的值
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String ageStr = request.getParameter("age");
        System.out.println(username+","+password+","+nickname+","+ageStr);
        /*
            必要的验证工作，保证注册的四个信息不为空，否则直响应注册失败的提示页面
            年龄还要求必须是一个数字格式
            失败页面:reg_error.html 居中显示一行字:注册失败，输入信息有误，请重新注册。
         */
        if(username==null||password==null||nickname==null||ageStr==null||
           !ageStr.matches("[0-9]+")){
            response.setEntity(new File("./webapps/myweb/reg_error.html"));
            return;
        }
        /*
            判断是否为重复用户，如果是重复用户则直接响应页面:reg_have_user.html
            该页面居中显示一行字:该用户已存在，请重新注册
         */
        File userFile = new File(userDirName+username+".obj");
        if(userFile.exists()){//文件已经存在说明该用户已被注册过
            response.setEntity(new File("./webapps/myweb/reg_have_user.html"));
            return;
        }
        int age = Integer.parseInt(ageStr);
        //2将该用户信息写入磁盘保存
        User user = new User(username,password,nickname,age);
        try(
                ObjectOutputStream oos = new ObjectOutputStream(
                                            // ./users/zhangsan.obj
                        new FileOutputStream(userDirName+username+".obj")
                );
        ){
            oos.writeObject(user);
            //注册成功
            response.setEntity(new File("./webapps/myweb/reg_success.html"));

        }catch(IOException e){
            e.printStackTrace();
        }

        //3设置response响应注册结果页面


        System.out.println("用户注册处理完毕!!!!");
    }

    public void login(HttpRequest request,HttpResponse response){
        System.out.println("开始处理登录...");
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        if(username==null||password==null){
            response.setEntity(new File("./webapps/myweb/login_error.html"));
            return;
        }

        File userFile = new File(userDirName+username+".obj");
        if(userFile.exists()){
            try(
                    ObjectInputStream ois = new ObjectInputStream(
                            new FileInputStream(userFile)
                    )
             ){
                User user = (User)ois.readObject();
                //比较密码
                if(user.getPassword().equals(password)){
                    //登录成功
                    response.setEntity(new File("./webapps/myweb/login_success.html"));
                    return;
                }
            }catch(IOException | ClassNotFoundException e){
                e.printStackTrace();
            }
        }
        response.setEntity(new File("./webapps/myweb/login_fail.html"));
        System.out.println("登录处理完毕!!!");
    }
}
